// https://leetcode.cn/problems/bulls-and-cows/
// Created by ade on 2022/9/19.
// 你在和朋友一起玩 猜数字（Bulls and Cows）游戏，该游戏规则如下：
//
//写出一个秘密数字，并请朋友猜这个数字是多少。朋友每猜测一次，你就会给他一个包含下述信息的提示：
//
//猜测数字中有多少位属于数字和确切位置都猜对了（称为 "Bulls"，公牛），
//有多少位属于数字猜对了但是位置不对（称为 "Cows"，奶牛）。也就是说，这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
//给你一个秘密数字 secret 和朋友猜测的数字 guess ，请你返回对朋友这次猜测的提示。
//
//提示的格式为 "xAyB" ，x 是公牛个数， y 是奶牛个数，A 表示公牛，B 表示奶牛。
//
//请注意秘密数字和朋友猜测的数字都可能含有重复数字。 secret.length == guess.length
#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

class Solution {
public:
    string getHint(string secret, string guess) {
        int len = secret.size();
        int b = 0, c = 0;
        string newS = "";
        unordered_map<int, int> m = {};
        for (int i = 0; i < len; i++) {
            if (secret[i] == guess[i]) {
                b++;
                continue;
            }
            newS += secret[i];
            m[guess[i] - '0']++;
        }
        for (int i = 0; i < newS.size(); i++) {
            if (m[newS[i] - '0'] > 0) {
                c++;
                m[newS[i] - '0']--;
            }
        }
        return to_string(b) + "A" + to_string(c) + "B";
    }
};

int main() {
    string a = "1807";
    string b = "7810";
    Solution so;
    cout << so.getHint(a, b);
    return 0;
}